﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using SB.Logging;
using SB.MediaLibrary.Entities;
using SB.Tools;

namespace SB.MediaLibrary
{
    public partial class Main : Form
    {
        private static readonly ILogger log = LoggingFacade.GetLogger(typeof(Main));

        SortableBindingList<Film> angezeigteFilme = new SortableBindingList<Film>();
        SortableBindingList<Genre> angezeigteGenres = new SortableBindingList<Genre>();
        SortableBindingList<Medium> angezeigteMedien = new SortableBindingList<Medium>();

        public Main()
        {
            InitializeComponent();

            udgvFilme.UniqueDatagridName = "Filme";
            udgvFilme.DataSource = angezeigteFilme;

            udgvGenres.UniqueDatagridName = "Genre";
            udgvGenres.DataSource = angezeigteGenres;

            udgvMedien.UniqueDatagridName = "Medien";
            udgvMedien.DataSource = angezeigteMedien;

            FilmeLaden();
            GenresLaden();
            MedienLaden();
        }

        private void FilmeLaden()
        {
            angezeigteFilme.Clear();
            Film f = new Film();
            IList<Film> filme = LogicFacade.FilmInterface.FilmSuchen(f);
            Commons.CopyIListToSortableBindingList(filme, ref angezeigteFilme);
        }

        private void GenresLaden()
        {
            angezeigteGenres.Clear();
            IList<Genre> genres = LogicFacade.GenreInterface.GenreAlleLaden();
            Commons.CopyIListToSortableBindingList(genres, ref angezeigteGenres);
        }

        private void MedienLaden()
        {
            angezeigteMedien.Clear();
            Medium m = new Medium();
            IList<Medium> medien = LogicFacade.MediumInterface.MediumSuchen(m);
            Commons.CopyIListToSortableBindingList(medien, ref angezeigteMedien);
        }

        private void btnNeuesGenre_Click(object sender, EventArgs e)
        {
            DialogResult result = (new GenreForm(GenreForm.VerwendungsTypen.Neu)).ShowDialog();
            if (result == DialogResult.OK)
            {
                GenresLaden();
            }
        }

        private void btnGenreBearbeiten_Click(object sender, EventArgs e)
        {
            DialogResult result = (new GenreForm(GenreForm.VerwendungsTypen.Bearbeiten, udgvGenres.GetSelectedItem<Genre>())).ShowDialog();
            /*if (result == DialogResult.OK)
            {
                GenresLaden();
            }*/
        }

        private void btnGenreEntfernen_Click(object sender, EventArgs e)
        {
            DialogResult result = MessageBox.Show("Soll das gewählte Genre wirklich entfernt werden?", "Frage", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

            if (result == DialogResult.Yes)
            {
                Genre genre = udgvGenres.GetSelectedItem<Genre>();
                LogicFacade.GenreInterface.GenreEntfernen(genre);
                angezeigteGenres.Remove(genre);
            }
        }
    }
}
